package com.lmf.annotation.config;

import com.lmf.annotation.bean.*;
import com.lmf.annotation.condition.LinuxCondition;
import com.lmf.annotation.condition.MyImportBeanDefinitionRegistrar;
import com.lmf.annotation.condition.MyImportSelector;
import com.lmf.annotation.condition.WindowCondition;
import org.springframework.context.annotation.*;

/**
 * 验证 注册组件 的方式，使用的配置类
 */
@Configuration
@Import({Student.class, Cat.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})  //快速在IOC中注册类，默认id是类的全类名
public class MyConfig_2 {

    /**
     *  @Scope:调整作用域，默认单实例
     *      prototype: 多实例
     *      singleton：单实例
     *      注意：多实例，单实例必须小写英文单词；其余范围，请查看笔记
     * @return
     */
//    @Scope(value = "prototype")
    @Scope(value = "singleton")
    @Lazy  //懒加载，创建容器时，不创建对象
    @Bean
    public Person person(){
        System.out.println("-------给容器中添加person对象--------");
        return new Person("李四",66);
    }

    @Conditional(WindowCondition.class) //满足一定条件，@Bean才会生效，这个注解可以用到方法上面，也可以用在类上面
    @Bean
    public Person windows(){
        return new Person("win10",25);
    }
    @Conditional(LinuxCondition.class)
    @Bean
    public Person linux(){
        return new Person("linux",26);
    }

    //注册自定义的 ColorFactoryBean
    @Bean
    public ColorFactoryBean colorFactoryBean(){
        return new ColorFactoryBean();
    }
}
